/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controleur;

import DAO.ChampsBDD;
import DAO.DAOFactory;
import DAO.IncidentDAOmysql;
import DAO.IncidentDao;
import DAO.UtilisateurDAOmysql;
import DAO.UtilisateurDao;
import Modele.Incident;
import Modele.Technicien;
import Modele.Utilisateur;
import Utils.Constantes;
import Vue.FenetrePrincipale;
import Vue.IncidentForm;
import Vue.PromptTechnicien;
import java.util.ArrayList;
import nemovelotechnicien.NemoVeloTechnicien;

/**
 *
 * @author 20cent
 */
public class FenetrePrincipaleControleur implements Observeur.Observeur {

    private FenetrePrincipale fenetre;
    private IncidentDao incidentDao;
    private UtilisateurDao utilisateurDao;
    private IncidentTableModel incidentTableModel;
    
    private int technicienID;

    public FenetrePrincipaleControleur(FenetrePrincipale fenetre) {
        this.fenetre = fenetre;

        DAOFactory factory = DAOFactory.getInstance();
        incidentDao = new IncidentDAOmysql(factory);
        utilisateurDao = new UtilisateurDAOmysql(factory);

        incidentTableModel = new IncidentTableModel(NemoVeloTechnicien.incidents);

        //on appliques les modeles à nos jTable
        this.fenetre.appliquerIncidentModel(incidentTableModel);
        incidentTableModel.fireTableStructureChanged();

        //Observer les données
        NemoVeloTechnicien.incidents.ajouterObserveur(this);
    }

    public void afficherIncidentDetail(int row) {
        new IncidentForm(fenetre, true, TypeFormulaire.AFFICHAGE, NemoVeloTechnicien.incidents.get(row)).setVisible(true);
    }

    public void recuperIncidents(int selectedTechnicienID) {
        technicienID = selectedTechnicienID;
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {

                for (Incident incident : incidentDao.getByFilter(new String[]{
                    ChampsBDD.TECHNICIEN_ID},new String[]{String.valueOf(technicienID)})) {
                    incident.ajouterObserveur(FenetrePrincipaleControleur.this);
                    NemoVeloTechnicien.incidents.add(incident);
                }
            }
        });
    }

    public void recuperTechniciens() {
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                ArrayList<Utilisateur> temp = utilisateurDao.getByType(Constantes.TYPE_TECH);
                for (Utilisateur technicien : utilisateurDao.getByType(Constantes.TYPE_TECH)) {
                    technicien.ajouterObserveur(FenetrePrincipaleControleur.this);
                    NemoVeloTechnicien.techniciens.add((Technicien) technicien);
                }

                new PromptTechnicien(fenetre, true, NemoVeloTechnicien.techniciens, FenetrePrincipaleControleur.this).setVisible(true);
            }
        });
    }

    @Override
    public void update(String str) {
        if (str.equals(Incident.class.getSimpleName())) {
            incidentTableModel.fireTableDataChanged();
        }
    }
}
